package org.inspiration.dudu.user.service;

import org.inspiration.dudu.common.pojo.Result;
import org.inspiration.dudu.user.model.dto.FavoriteFolderDTO;
import org.inspiration.dudu.user.model.entity.FavoriteFolderEntity;
import org.inspiration.dudu.user.model.vo.FavoriteFolderVO;

import java.util.List;

/**
 * 收藏夹服务接口，提供对用户收藏夹的相关操作。
 */
public interface FavoriteFolderService {
    /**
     * 创建一个新的收藏夹。
     *
     * @param favoriteFolderDTO 包含收藏夹信息的 DTO 对象
     */
    void createFavoriteFolder(FavoriteFolderDTO favoriteFolderDTO);

    /**
     * 将 FavoriteFolderDTO 转换为 FavoriteFolderEntity。
     *
     * @param favoriteFolderDTO 要转换的收藏夹 DTO 对象
     * @return 转换后的收藏夹实体对象
     */
    FavoriteFolderEntity transToEntity(FavoriteFolderDTO favoriteFolderDTO);

    /**
     * 删除指定的收藏夹。
     *
     * @param favoriteFolderDTO 包含要删除的收藏夹信息的 DTO 对象
     */
    void deleteFavoriteFolder(FavoriteFolderDTO favoriteFolderDTO);

    /**
     * 根据用户 ID 获取所有收藏夹。
     *
     * @param userId 用户的唯一标识
     * @return 用户的所有收藏夹列表
     */
    List<FavoriteFolderVO> getAllFavoriteFoldersByUserId(Long userId);

    /**
     * 将 FavoriteFolderEntity 转换为 FavoriteFolderVO。
     *
     * @param favoriteFolderEntity 要转换的收藏夹实体对象
     * @return 转换后的收藏夹视图对象
     */
    FavoriteFolderVO transToVO(FavoriteFolderEntity favoriteFolderEntity);

    /**
     * 增加指定收藏夹的内容数量。
     *
     * @param folderId 收藏夹的唯一标识
     */
    void increaseContentCount(Long folderId);

    /**
     * 减少指定收藏夹的内容数量。
     *
     * @param folderId 收藏夹的唯一标识
     */
    void decreaseContentCount(Long folderId);
}
